package registnet.base;

import java.util.List;
import java.util.Vector;

/**
 * An implementation of a course which is associated with a plan of coursework.
 */
public class PlanOfCourseWork extends AbstractPlanOfCourseWork {

	/**
	 * List of courseworks of type GE_AH.
	 */
	private List<CourseWork> GE_AH = new Vector<CourseWork>();
	
	/**
	 * List of courseworks of type GE_MST.
	 */
	private List<CourseWork> GE_MST = new Vector<CourseWork>();
	
	/**
	 * List of courseworks of type GE_SSP.
	 */
	private List<CourseWork> GE_SSP = new Vector<CourseWork>();
	
	/**
	 * List of courseworks of type MAJOR.
	 */
	private List<CourseWork> MAJOR = new Vector<CourseWork>();
	
	/**
	 * List of courseworks of type ELECTIVE.
	 */
	private List<CourseWork> ELECTIVE = new Vector<CourseWork>();
	
	/**
	 * List of courseworks of type PE2.
	 */
	private List<CourseWork> PE2 = new Vector<CourseWork>();
	
	/**
	 * List of courseworks of type NSTP1.
	 */
	private List<CourseWork> NSTP1 = new Vector<CourseWork>();
	
	/**
	 * List of courseworks of type NSTP2.
	 */
	private List<CourseWork> NSTP2 = new Vector<CourseWork>();
	
	/**
	 * List of courseworks of type CMSCCOURSE.
	 */
	private List<CourseWork> CMSCCOURSE = new Vector<CourseWork>();
	
	/**
	 * List of courseworks of type COGNATE.
	 */
	private List<CourseWork> COGNATE = new Vector<CourseWork>();
	
	/**
	 * List of courseworks of type OPTION.
	 */
	private List<CourseWork> OPTION = new Vector<CourseWork>();
	
	/**
	 * List of courseworks of type OPTION6.
	 */
	private List<CourseWork> OPTION6 = new Vector<CourseWork>();
	
	/**
	 * List of courseworks of type SEMINAR.
	 */
	private List<CourseWork> SEMINAR = new Vector<CourseWork>();
	
	/**
	 * List of courseworks of type SPECIALIZED.
	 */
	private List<CourseWork> SPECIALIZED = new Vector<CourseWork>();
	
	/**
	 * List of courseworks of type SUPPORTIVE.
	 */
	private List<CourseWork> SUPPORTIVE = new Vector<CourseWork>();
	
	/**
	 * List of courseworks of type TECHNICAL.
	 */
	private List<CourseWork> TECHNICAL = new Vector<CourseWork>();
	
	/**
	 * List of courseworks of type THESIS.
	 */
	private List<CourseWork> THESIS = new Vector<CourseWork>();
	
	/**
	 * List of courseworks of type PRACTICUM.
	 */
	private List<CourseWork> PRACTICUM = new Vector<CourseWork>();
	
	/**
	 * List of courseworks of type ADDITIONAL.
	 */
	private List<CourseWork> ADDITIONAL = new Vector<CourseWork>();
	
	/**
	 * List of all the courseworks.
	 */
	private List<List<CourseWork>> courselist = new Vector<List<CourseWork>>();
	
	/**
	 * Count
	 */
	private int count;

	/**
	 * Creates a plan of coursework to be associated with a student
	 * with the given student number.
	 * @param studentNumber
	 */
	public PlanOfCourseWork(String studentNumber){
		this.studentNumber = studentNumber;
		this.courselist.add(GE_AH);
		this.courselist.add(GE_MST);
		this.courselist.add(GE_SSP);
		this.courselist.add(MAJOR);
		this.courselist.add(ELECTIVE);
		this.courselist.add(PE2);
		this.courselist.add(NSTP1);
		this.courselist.add(NSTP2);
		this.courselist.add(CMSCCOURSE);
		this.courselist.add(COGNATE);
		this.courselist.add(OPTION);
		this.courselist.add(OPTION6);
		this.courselist.add(SEMINAR);
		this.courselist.add(SPECIALIZED);
		this.courselist.add(SUPPORTIVE);
		this.courselist.add(TECHNICAL);
		this.courselist.add(THESIS);
		this.courselist.add(PRACTICUM);
		this.courselist.add(ADDITIONAL);

	}
	
	/**
	 * Adds a coursework to the list of courseworks of type GE_AH.
	 * @param course
	 */
	public void add_GE_AH(CourseWork course){
		this.GE_AH.add(course);
	}
	
	/**
	 * Returns the list of courseworks of type GE_AH.
	 * @return the list of courseworks of type GE_AH
	 */
	public List<CourseWork> get_GE_AH(){
		return this.GE_AH;
	}
	
	/**
	 * Adds a coursework to the list of courseworks of type GE_MST.
	 * @param course
	 */
	public void add_GE_MST(CourseWork course){
		this.GE_MST.add(course);
	}
	
	/**
	 * Returns the list of courseworks of type GE_MST.
	 * @return the list of courseworks of type GE_MST
	 */
	public List<CourseWork> get_GE_MST(){
		return this.GE_MST;
	}
	
	/**
	 * Adds a coursework to the list of courseworks of type GE_SSP.
	 * @param course
	 */
	public void add_GE_SSP(CourseWork course){
		this.GE_SSP.add(course);
	}
	
	/**
	 * Returns the list of courseworks of type get_GE_SSP.
	 * @return the list of courseworks of type get_GE_SSP
	 */
	public List<CourseWork> get_GE_SSP(){
		return this.GE_SSP;
	}
	
	/**
	 * Adds a coursework to the list of courseworks of type MAJOR.
	 * @param course
	 */
	public void add_MAJOR(CourseWork course){
		this.MAJOR.add(course);
	}
	
	/**
	 * Returns the list of courseworks of type MAJOR.
	 * @return the list of courseworks of type MAJOR
	 */
	public List<CourseWork> get_MAJOR(){
		return this.MAJOR;
	}
	
	/**
	 * Adds a coursework to the list of courseworks of type ELECTIVE.
	 * @param course
	 */
	public void add_ELECTIVE(CourseWork course){
		this.ELECTIVE.add(course);
	}
	
	/**
	 * Returns the list of courseworks of type ELECTIVE.
	 * @return the list of courseworks of type ELECTIVE
	 */
	public List<CourseWork> get_ELECTIVE(){
		return this.ELECTIVE;
	}
	
	/**
	 * Adds a coursework to the list of courseworks of type PE2.
	 * @param course
	 */
	public void add_PE2(CourseWork course){
		this.PE2.add(course);
	}
	
	/**
	 * Returns the list of courseworks of type PE2.
	 * @return the list of courseworks of type PE2
	 */
	public List<CourseWork> get_PE2(){
		return this.PE2;
	}
	
	/**
	 * Adds a coursework to the list of courseworks of type NSTP1.
	 * @param course
	 */
	public void add_NSTP1(CourseWork course){
		this.NSTP1.add(course);
	}
	
	/**
	 * Returns the list of courseworks of type NSTP1.
	 * @return the list of courseworks of type NSTP1
	 */
	public List<CourseWork> get_NSTP1(){
		return this.NSTP1;
	}
	
	/**
	 * Adds a coursework to the list of courseworks of type NSTP2.
	 * @param course
	 */
	public void add_NSTP2(CourseWork course){
		this.NSTP2.add(course);
	}
	
	/**
	 * Returns the list of courseworks of type NSTP2.
	 * @return the list of courseworks of type NSTP2
	 */
	public List<CourseWork> get_NSTP2(){
		return this.NSTP2;
	}
	
	/**
	 * Adds a coursework to the list of courseworks of type CMSCCOURSE.
	 * @param course
	 */
	public void add_CMSCCOURSE(CourseWork course){
		this.CMSCCOURSE.add(course);
	}
	
	/**
	 * Returns the list of courseworks of type CMSCCOURSE.
	 * @return the list of courseworks of type CMSCCOURSE
	 */
	public List<CourseWork> get_CMSCCOURSE(){
		return this.CMSCCOURSE;
	}
	
	/**
	 * Adds a coursework to the list of courseworks of type COGNATE.
	 * @param course
	 */
	public void add_COGNATE(CourseWork course){
		this.COGNATE.add(course);
	}
	
	/**
	 * Returns the list of courseworks of type COGNATE.
	 * @return the list of courseworks of type COGNATE
	 */
	public List<CourseWork> get_COGNATE(){
		return this.COGNATE;
	}
	
	/**
	 * Adds a coursework to the list of courseworks of type OPTION.
	 * @param course
	 */
	public void add_OPTION(CourseWork course){
		this.OPTION.add(course);
	}
	
	/**
	 * Returns the list of courseworks of type OPTION.
	 * @return the list of courseworks of type OPTION
	 */
	public List<CourseWork> get_OPTION(){
		return this.OPTION;
	}
	
	/**
	 * Adds a coursework to the list of courseworks of type add_OPTION6.
	 * @param course
	 */
	public void add_OPTION6(CourseWork course){
		this.OPTION6.add(course);
	}
	
	/**
	 * Returns the list of courseworks of type OPTION6.
	 * @return the list of courseworks of type OPTION6
	 */
	public List<CourseWork> get_OPTION6(){
		return this.OPTION6;
	}
	
	/**
	 * Adds a coursework to the list of courseworks of type SEMINAR.
	 * @param course
	 */
	public void add_SEMINAR(CourseWork course){
		this.SEMINAR.add(course);
	}
	
	/**
	 * Returns the list of courseworks of type SEMINAR.
	 * @return the list of courseworks of type SEMINAR
	 */
	public List<CourseWork> get_SEMINAR(){
		return this.SEMINAR;
	}
	
	/**
	 * Adds a coursework to the list of courseworks of type SPECIALIZED.
	 * @param course
	 */
	public void add_SPECIALIZED(CourseWork course){
		this.SPECIALIZED.add(course);
	}
	
	/**
	 * Returns the list of courseworks of type SPECIALIZED.
	 * @return the list of courseworks of type SPECIALIZED
	 */
	public List<CourseWork> get_SPECIALIZED(){
		return this.SPECIALIZED;
	}
	
	/**
	 * Adds a coursework to the list of courseworks of type SUPPORTIVE.
	 * @param course
	 */
	public void add_SUPPORTIVE(CourseWork course){
		this.SUPPORTIVE.add(course);
	}
	
	/**
	 * Returns the list of courseworks of type SUPPORTIVE.
	 * @return the list of courseworks of type SUPPORTIVE
	 */
	public List<CourseWork> get_SUPPORTIVE(){
		return this.SUPPORTIVE;
	}
	
	/**
	 * Adds a coursework to the list of courseworks of type TECHNICAL.
	 * @param course
	 */
	public void add_TECHNICAL(CourseWork course){
		this.TECHNICAL.add(course);
	}
	
	/**
	 * Returns the list of courseworks of type TECHNICAL.
	 * @return the list of courseworks of type TECHNICAL
	 */
	public List<CourseWork> get_TECHNICAL(){
		return this.TECHNICAL;
	}
	
	/**
	 * Adds a coursework to the list of courseworks of type THESIS.
	 * @param course
	 */
	public void add_THESIS(CourseWork course){
		this.THESIS.add(course);
	}
	
	/**
	 * Returns the list of courseworks of type THESIS.
	 * @return the list of courseworks of type THESIS
	 */
	public List<CourseWork> get_THESIS(){
		return this.THESIS;
	}
	
	/**
	 * Adds a coursework to the list of courseworks of type PRACTICUM.
	 * @param course
	 */
	public void add_PRACTICUM(CourseWork course){
		this.PRACTICUM.add(course);
	}
	
	/**
	 * Returns the list of courseworks of type PRACTICUM.
	 * @return the list of courseworks of type PRACTICUM
	 */
	public List<CourseWork> get_PRACTICUM(){
		return this.PRACTICUM;
	}
	
	/**
	 * Adds a coursework to the list of courseworks of type ADDITIONAL.
	 * @param course
	 */
	public void add_ADDITIONAL(CourseWork course){
		this.ADDITIONAL.add(course);
	}
	
	/**
	 * Returns the list of courseworks of type ADDITIONAL.
	 * @return the list of courseworks of type ADDITIONAL
	 */
	public List<CourseWork> get_ADDITIONAL(){
		return this.ADDITIONAL;
	}
	
	/**
	 * Returns the list of all the courseworks.
	 * @return the list of all the courseworks
	 */
	public List<List<CourseWork>> getCourseList(){
		return this.courselist;
	}
	
	/**
	 * Sets the value of count.
	 * @param count
	 */
	public void setCount(int count){
		this.count = count;
	}
	
	/**
	 * Returns the value of count.
	 * @return the value of count
	 */
	public int getCount(){
		return this.count;
	}
	

}
